#ifndef __IIC_H__
#define __IIC_H__

#include "gpio.h"

#define SCL_HIGH  hal_gpio_write(GPIOD, GPIO_PIN_6, HIGH_LEVEL)
#define SCL_LOW  hal_gpio_write(GPIOD, GPIO_PIN_6, LOW_LEVEL)

#define SDA_HIGH hal_gpio_write(GPIOD, GPIO_PIN_7, HIGH_LEVEL)
#define SDA_LOW hal_gpio_write(GPIOD, GPIO_PIN_7, LOW_LEVEL)

#define SDA_MODE_OUT hal_gpio_mode(GPIOD, GPIO_PIN_7, OUT_MODE)
#define SDA_MODE_IN hal_gpio_mode(GPIOD, GPIO_PIN_7, IN_MODE)

#define SDA_READ hal_gpio_read(GPIOD, GPIO_PIN_7)

// 主机数据传送方向
// 0 = 主机发送
// 1 = 主机接收
typedef enum {
    HOST_TRANS = 0,
    HOST_RECV,
} trans_t;

// 应答信号
// 0 = 应答 
// 1 = 非应答
typedef enum {
    ACK = 0,
    NO_ACK = 1,
}ack_t;

#define SLAVE_ADDR 0x1C

void iic_init();
// 发送起始信号
void iic_start();
// 发送终止信号
void iic_stop();
// 发送应答信号
void iic_ack(ack_t ack);
// 发送寻址信号
void iic_dev_addr(char dev_addr, trans_t trans);
// 发送一个字节
ack_t iic_send_byte(char byte);
// 接收一个字节
char iic_read_byte();

// 延时微秒
void delay_us();
// 从加速度传感器读取数据
char mma8451_read_byte(char reg_addr);
// 向加速度传感器发送数据
void mma8451_write_tyte(char reg_addr, char data);
// 加速度传感器初始化
void mma8451_init();
// 从加速度传感器获取xyz三轴加速度
short get_xyz_from_mma8451(char reg_base_addr);

#endif

